package gov.fgn.sijyp.general.util;

import java.io.Serializable;

import org.apache.commons.lang3.StringUtils;

/**
 * Clase inutil para transformar los campos separados de informacion
 * de nombre en la vista persona para el uso en el tool de persona. No
 * se usa porque se modifica la vista para que almacene el nombre
 * completo en un solo campo, solo para consulta. para el resto de
 * operaciones (CRUD completo) se debe integrar haciendo la
 * transformacion.
 * 
 * @author ricardo.buitrago@globant.com
 */
public class NombreData implements Serializable {

  private static final long serialVersionUID = 2899732749624997866L;

  private static final String SEPARADOR = " ";

  private static final String DEFAULT = "";

  private static final int PARTES_NOMBRE = 4;

  private String nombreCompleto;

  private String[] partesNombre = new String[4];

  public String getNombreCompleto() {
    return nombreCompleto;
  }

  public void setNombreCompleto(String nombreCompleto) {
    this.nombreCompleto = nombreCompleto;
  }

  public void setNombreCompleto(String... partes) {
    StringBuilder buf = new StringBuilder();

    for (int i = 0; i < PARTES_NOMBRE; i++) {
      partesNombre[i] = normalizar(partes[i]);
      boolean isLast = i == (PARTES_NOMBRE - 1);
      buf.append(appendSeparator(partesNombre[i], isLast));
    }

    setNombreCompleto(buf.toString());
  }

  public String getPrimerNombre() {
    return partesNombre[0];
  }

  public String getSegundoNombre() {
    return partesNombre[1];
  }

  public String getPrimerApellido() {
    return partesNombre[2];
  }

  public String getSegundoApellido() {
    return partesNombre[3];
  }

  /**
   * @param s
   *          El String a normalizar
   * @return un String vacio si llega un valor <code>null</code> o
   *         vacio, o el String original seguido de un separador en
   *         caso contrario.
   */
  public String normalizar(String s) {
    String result = null;
    result = StringUtils.defaultIfEmpty(s, DEFAULT);
    return result;
  }

  /**
   * @param s
   *          el String original
   * @param isLast
   *          flag que representa
   * @return
   */
  public String appendSeparator(String s, boolean isLast) {
    return isLast || isEmpty(s) ? s : s + SEPARADOR;
  }

  public boolean isEmpty(String s) {
    return StringUtils.isEmpty(s);
  }

}
